草庐IT

LeetCode 1.两数之和

全部标签

LeetCode-45. 跳跃游戏II - 题解分析

题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0i+j返回到达 nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。示例1:输入:nums=[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为0跳到下标为1的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例2:输入:nums=[2,3,0,1,4]输出:2提示:10题目保证可以到达 nums[n-1]

LeetCode 84.柱状图中最大的矩形 | 单调栈的使用 | 解题思路及算法 Java

柱状图中最大的矩形原题:84.LargestRectangleinHistogram题目描述:给定\(n\)个非负整数,用来表示柱状图中每个柱子的高度。每个柱子相邻且宽度为1。求这个柱状图中能容纳的最大矩形的面积。思路:对于一个柱状图中的最大矩形,我们可以观察出如下性质:矩形的高必等于某个柱子的高度,也就是矩形的上边与某个柱子的上边在同一条直线上。证明:假设上述不成立。那对于每个柱子,它们的高都比这个最大矩形的高至少大1。因此我们可以增加这个矩形的高,得到一个更大的矩形,并且这个矩形还在柱状图中。因此这个矩形不是最大的矩形,得出悖论。因此此条性质成立。矩形的左边柱子的高度小于矩形高度,矩形的右

LeetCode 84.柱状图中最大的矩形 | 单调栈的使用 | 解题思路及算法 Java

柱状图中最大的矩形原题:84.LargestRectangleinHistogram题目描述:给定\(n\)个非负整数,用来表示柱状图中每个柱子的高度。每个柱子相邻且宽度为1。求这个柱状图中能容纳的最大矩形的面积。思路:对于一个柱状图中的最大矩形,我们可以观察出如下性质:矩形的高必等于某个柱子的高度,也就是矩形的上边与某个柱子的上边在同一条直线上。证明:假设上述不成立。那对于每个柱子,它们的高都比这个最大矩形的高至少大1。因此我们可以增加这个矩形的高,得到一个更大的矩形,并且这个矩形还在柱状图中。因此这个矩形不是最大的矩形,得出悖论。因此此条性质成立。矩形的左边柱子的高度小于矩形高度,矩形的右

动态规划的解题套路leetcode案例分析

今天我们来讲解leetcode案例分析,如何动态规划的解题套路,态规划的核心思想,以前经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。下面一起来学习动态规划的套路,文章要有不正确的地方,欢迎大家来吐槽,感谢感谢~什么是动态规划?动态规划的核心思想一个例子走进动态规划动态规划的解题套路leetcode案例分析公众号:捡田螺的小男孩什么是动态规划?动态规划(英语:Dynamicprogramming,简称DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重

动态规划的解题套路leetcode案例分析

今天我们来讲解leetcode案例分析,如何动态规划的解题套路,态规划的核心思想,以前经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。下面一起来学习动态规划的套路,文章要有不正确的地方,欢迎大家来吐槽,感谢感谢~什么是动态规划?动态规划的核心思想一个例子走进动态规划动态规划的解题套路leetcode案例分析公众号:捡田螺的小男孩什么是动态规划?动态规划(英语:Dynamicprogramming,简称DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重

LeetCode 977. 有序数组的平方

给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,49,121] 提示:1-104nums已按非递减顺序排序 进阶:请你设计时间复杂度为O(n)的算法解决本问题 分析:  不能忽略题干的信息:数组本身为非递减的顺序,由此可分为三种情况讨论:  1、数组元素全都大于等于0,此时返回数组元素自身的平

LeetCode 977. 有序数组的平方

给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,49,121] 提示:1-104nums已按非递减顺序排序 进阶:请你设计时间复杂度为O(n)的算法解决本问题 分析:  不能忽略题干的信息:数组本身为非递减的顺序,由此可分为三种情况讨论:  1、数组元素全都大于等于0,此时返回数组元素自身的平

[牛客BM49&LeetCode227]基本计算器-双栈递归方法-最易理解

双栈+递归方法比目前官网题解更容易理解且简单的方法。双栈:一个栈用于存放数字,一个用于存放符号。递归:括号内表达式求值作为返回值,减少处理括号时边界条件的难度。基本思想:参考人计算的思维,如果[后入栈的运算符优先级]大于[先入栈的运算符优先级],那么进行计算。奇怪的细节:1.考虑字符串开始就有可能出现负号和正号,因此在两个栈的开头分别插入'0'、'-'或'0'、'+'。2.int相加时中间结果可能溢出,使用longlong保存结果。另外:这里使用递归和传统递归模板不同,传统模板如下:=1=if(终止条件)return;=2=[向下传递时]逻辑处理(可能有,也可能没有,具体问题具体分析)=3=递

[牛客BM49&LeetCode227]基本计算器-双栈递归方法-最易理解

双栈+递归方法比目前官网题解更容易理解且简单的方法。双栈:一个栈用于存放数字,一个用于存放符号。递归:括号内表达式求值作为返回值,减少处理括号时边界条件的难度。基本思想:参考人计算的思维,如果[后入栈的运算符优先级]大于[先入栈的运算符优先级],那么进行计算。奇怪的细节:1.考虑字符串开始就有可能出现负号和正号,因此在两个栈的开头分别插入'0'、'-'或'0'、'+'。2.int相加时中间结果可能溢出,使用longlong保存结果。另外:这里使用递归和传统递归模板不同,传统模板如下:=1=if(终止条件)return;=2=[向下传递时]逻辑处理(可能有,也可能没有,具体问题具体分析)=3=递

[牛客BM70&LeetCode322]零钱兑换Ⅰ——DFS,记忆化搜索,动态规划(C++)

题目描述给你一个整数数组arr,表示不同面额的硬币;以及一个整数aim,表示需要放入钱包的目标金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。每种硬币的数量无限。用例1:输入:[1,2,3],6输出:2(即3+3)思路一:深度优先搜索本题自然可以通过遍历所有可能的硬币组合以求得最少的硬币数量。每次都选择三种面额(以用例1举例)中的一枚放入到钱包中,直到钱包达到目标金额。上面这个思路其实就是深度优先搜索的方法(DFS)。递归深度就是使用的硬币的个数。然而这种方式将会出现大量的重复计算,比如用例中:6-2=4,6-1-1=4;导致4这个节点会被多